import 'package:scoped_model/scoped_model.dart';

/// 计数器模型，继承自Model类
/// 这是Scoped Model的核心概念，所有需要共享的状态都应该放在Model中
class CounterModel extends Model {
  // 私有变量，存储计数器的值
  int _counter = 0;

  // 私有变量，存储是否正在加载
  bool _isLoading = false;

  // 私有变量，存储用户名
  String _username = 'Guest';

  /// 获取当前计数器的值
  int get counter => _counter;

  /// 获取是否正在加载
  bool get isLoading => _isLoading;

  /// 获取用户名
  String get username => _username;

  /// 增加计数器的值
  /// 调用notifyListeners()来通知所有监听器状态已改变
  void increment() {
    _counter++;
    notifyListeners(); // 这是关键！通知UI更新
  }

  /// 减少计数器的值
  void decrement() {
    if (_counter > 0) {
      _counter--;
      notifyListeners();
    }
  }

  /// 重置计数器
  void reset() {
    _counter = 0;
    notifyListeners();
  }

  /// 设置用户名
  void setUsername(String name) {
    _username = name;
    notifyListeners();
  }

  /// 模拟异步操作（比如网络请求）
  Future<void> incrementAsync() async {
    _isLoading = true;
    notifyListeners(); // 先通知开始加载

    // 模拟网络延迟
    await Future.delayed(const Duration(seconds: 2));

    _counter++;
    _isLoading = false;
    notifyListeners(); // 通知加载完成并更新计数
  }

  /// 批量增加
  void addMultiple(int value) {
    _counter += value;
    notifyListeners();
  }

  /// 获取计数器的状态描述
  String get counterStatus {
    if (_counter == 0) return '零';
    if (_counter < 10) return '低';
    if (_counter < 50) return '中';
    return '高';
  }

  /// 静态方法，用于在Widget中方便地获取Model实例
  /// 这是Scoped Model的推荐用法
  static CounterModel of(context) => ScopedModel.of<CounterModel>(context);
}
